#ifndef matrix44f_____
#define matrix44f_____

// macro allows access to elements by typical 2d row major order
// and returns correct 1d column major index

#define INDEX(r,c) (c << 2) + r

class matrix44f
{

	// Notes: this matrix class mimics OpenGL's storage type and method of
	// accessing matrix elements (column major order). A small macro
	// is included to access the elements in normal 2d row major order if
	// desired (remember that using it will add math operations)

  public:

	//-------------------------------------------------------------------------
	// members
	//-------------------------------------------------------------------------

	float m[16];

	//-------------------------------------------------------------------------
	// constructors
	//-------------------------------------------------------------------------

	matrix44f();

	//-------------------------------------------------------------------------

	matrix44f(float a0, float a1, float a2, float a3,
		      float a4, float a5, float a6, float a7,
		      float a8, float a9, float a10, float a11,
		      float a12, float a13, float a14, float a15);

	//-------------------------------------------------------------------------
	// overloaded operators
	//-------------------------------------------------------------------------

	matrix44f operator * (matrix44f n);
	UnitRotationMatrix();

};

#endif